/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 98152
 * Date: 2024-11-16
 * Time: 23:21
 */
import java.util.*;

public class Main2 {
    public static int[][] arr; // 存储二维数组
    public static List<Integer> result; // 存储选中的行号

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        // 读取行数和列数
        int n = in.nextInt();

        // 初始化二维数组
        arr = new int[n][3];

        // 输入二维数组，确保数据在8到14之间
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < 3; j++) {
                arr[i][j] = in.nextInt();
            }
        }

        // 用于记录找到的元素行号
        result = new ArrayList<>();

        // 尝试从每一行中选出元素
        if (canSelect(0, new HashSet<>())) {
            for (int row : result) {
                System.out.print((row + 1) + " "); // 输出1基的行号
            }
        } else {
            System.out.println("oops!");
        }
    }

    // 回溯方法，尝试从每行中选择一个元素
    static boolean canSelect(int row, Set<Integer> used) {
        // 如果已经选完所有行，返回成功
        if (row >= arr.length) {
            return used.size() == 7; // 只有7个目标数字才算成功
        }

        // 遍历当前行
        for (int num : arr[row]) {
            if (!used.contains(num)) {
                // 如果数字在目标范围内并且没有被使用
                used.add(num);
                result.add(row); // 记录当前行

                // 递归尝试下一行
                if (canSelect(row + 1, used)) {
                    return true; // 如果成功，直接返回
                }

                // 撤销选择
                used.remove(num);
                result.remove(result.size() - 1); // 移除最后一个选中的行
            }
        }
        return false; // 返回失败
    }

}
